package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomFlag;
import br.com.telescope.adsrt.dom.DomOpcao;
import br.com.telescope.adsrt.dom.DomTextLong;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.config.Config;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.CustomActionFeature;
import br.com.telescope.t2.feature.CustomFeature;
import solutions.ferpa.ztest.ent.*;

/**
 * Controle de bloqueio da aplicação contra alterações nos dados.
 * <p>
 * null
 * <P>
 * Telescope origin: RTSYSINF.UTL_READ_ONLY
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class UtlReadOnly extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTSYSINF.UTL_READ_ONLY";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Controle de bloqueio da aplicação contra alterações nos dados");
    }
    
    
    // Record items
    private DomOpcao aModoAcesso;
    private DomFlag aPermitirAlteracoesEstaSessaoApenas;
    private DomTextLong aMensagem;
    
    // Query items
    
    @Override
    public void initAttributes() {
        
        aModoAcesso = new DomOpcao();
        aModoAcesso.context(ctx).name("MODO_ACESSO").label("Modo de acesso aos dados").unbound(true).group(true);
        aModoAcesso.addOption("R", "Apenas leitura");
        aModoAcesso.addOption("W", "Leitura e escrita");
        
        aPermitirAlteracoesEstaSessaoApenas = new DomFlag();
        aPermitirAlteracoesEstaSessaoApenas.context(ctx).name("PERMITIR_ALTERACOES_ESTA_SESSAO_APENAS").label("Permitir alterações para esta sessão apenas").unbound(true);
        
        aMensagem = new DomTextLong();
        aMensagem.context(ctx).name("MENSAGEM").label("Mensagem").unbound(true);
        
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="CUSTOM">
    public class FCustom extends CustomFeature {
        
        @Override
        public void initForm() {
            aModoAcesso.setOptional(false);
            addField(aModoAcesso, "rqd");
            aPermitirAlteracoesEstaSessaoApenas.setOptional(false);
            addField(aPermitirAlteracoesEstaSessaoApenas, "rqd");
            addField(aMensagem, "opt");
        }
        
        @Override
        public void preDisplay() {
            try {
                lerConfiguracoes();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        @Override
        public void onAction() {
            addSubmit(getFeature("SALVAR")).label("Salvar");
        }
        
        {
            setFeatureName("CUSTOM");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="SALVAR">
    public class FSalvar extends CustomActionFeature {
        
        @Override
        public void initForm() {
        }
        
        @Override
        public void execute() {
            try {
                salvar();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("SALVAR");
            setTitle("Salvar");
            setActionTitle("Salvar");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FCustom());
        addFeature(new FSalvar());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "CUSTOM";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public String getModoAcesso() {
        return aModoAcesso.getValue();
    }
    
    public void setModoAcesso(String value) {
        this.aModoAcesso.setValue(value);
    }
    
    public String getPermitirAlteracoesEstaSessaoApenas() {
        return aPermitirAlteracoesEstaSessaoApenas.getValue();
    }
    
    public void setPermitirAlteracoesEstaSessaoApenas(String value) {
        this.aPermitirAlteracoesEstaSessaoApenas.setValue(value);
    }
    
    public String getMensagem() {
        return aMensagem.getValue();
    }
    
    public void setMensagem(String value) {
        this.aMensagem.setValue(value);
    }
    // </editor-fold>
    
    /**
     * Salvar.
     * <p>
     * Configura o sistema para bloquear ou não as alterações de dados 
     * através das interfaces.
     * <P>
     */
    public void salvar() throws AdsException {
        // <user-code id="2945612" parentId="2945604" hashcode="b2a13fd" length="352">
        ctx.readFields(aModoAcesso, aPermitirAlteracoesEstaSessaoApenas, aMensagem);
        ctx.setAccessMode(aModoAcesso.getValue());
        ctx.setPreference("RT.ACCESS_MODE", aModoAcesso.getValue());
        ctx.setPreference("RT.ACCESS_MODE_MESSAGE", aMensagem.getValue());
        ctx.setSessionObject("ENABLE_ACCESS", aPermitirAlteracoesEstaSessaoApenas.getValue());
        doIndex();
        
        // </user-code>
    }
    
    /**
     * Ler configurações.
     * <p>
     * Busca as configurações atuais.
     */
    private void lerConfiguracoes() throws AdsException {
        // <user-code id="2945613" parentId="2945609" hashcode="6f9278fb" length="258">
        // import br.com.telescope.t2.config.Config;
        aModoAcesso.setValue(ctx.getAccessMode());
        aMensagem.setValue(Config.getInstance().getParameter("RT.ACCESS_MODE_MESSAGE"));
        aPermitirAlteracoesEstaSessaoApenas.setValue(ctx.getSessionString("ENABLE_ACCESS"));
        
        // </user-code>
    }
}
